/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package negocio;

import java.io.Serializable;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;

/**
 *
 * @author Jeferson
 */
public class Nota implements Comparable<Nota>, Serializable {
    
    private float valor;
    
    public Nota(float valor) throws IlegalNotaException{
        if(valor < 0 || valor > 10)
                throw new IlegalNotaException("uma nota deve ter valor entre 0 e 10.");
        this.valor = valor;
    }
    
    public void setNota(Nota n) throws IlegalNotaException{
        if(n.getValor()>10 || n.getValor()<0)
            throw new IlegalNotaException("uma nota deve ter valor entre 0 e 10.");
        valor = n.getValor();
    }
    
    public float getValor(){
        return this.valor;
    }
    
    public BigDecimal getNotaInBigDecimal(){
        return new BigDecimal(valor).setScale(1, RoundingMode.HALF_DOWN);
    }
    
    public String getNotaInString(){
        return getNotaInBigDecimal().toString().replace(".", ",");
    }
    
    public void add(Nota n) throws IlegalNotaException{
        float r = this.valor + n.getValor();
        this.setNota(new Nota(r));
    }
    
    public void sub(Nota n) throws IlegalNotaException{
        float r = this.valor - n.getValor();
        this.setNota(new Nota(r));
    }

    public int compareTo(Nota o) {
        if(this.valor>=o.getValor())
            return 1;
        return 0;
    }
    
    public boolean maiorQueMedia(){
        if(valor>=5)
            return true;
        return false;
    }
    
    public static Nota media(Nota n1, Nota n2){
        try {
            float m = 0;
            if(n1!=null)
                m = m + n1.valor/2;
            if(n2!=null)
                m = m + n2.valor/2;
            return new Nota(m);
        } catch (IlegalNotaException ex) {
            Logger.getLogger(Nota.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Nota Inválida. Nota,78");
        }
        return null;
    }
    
    public static Nota mediaMaior(Nota n1, Nota n2){
        try {
            float m = 0;
            if(n1!=null)
                m = m + n1.valor/2;
            if(n2!=null)
                if(n2.valor>n1.valor)
                    m = m + n2.valor/2;
                else
                    m = m*2;
            else
                m = m*2;
            return new Nota(m);
        } catch (IlegalNotaException ex) {
            Logger.getLogger(Nota.class.getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Nota Inválida. Nota,96");
        }
        return null;
    }
    
}
